cmake_minimum_required(VERSION 3.16)
project(gui_app VERSION 0.1 LANGUAGES CXX)

# 开启自动 UI 生成、元对象编译和资源编译
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

set(CMAKE_BUILD_TYPE Debug)

# 设置 C++ 标准
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# 查找 Qt 组件
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets LinguistTools Multimedia)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets LinguistTools Multimedia)

# 定义项目源文件列表
set(PROJECT_SOURCES
    main.cpp
    mainwindow.cpp
    mainwindow.h
    mainwindow.ui
    commWithBridge.h 
    commWithBridge.cpp
    commWithBoard.cpp 
    commWithBoard.h  
    commSignal.h
    jsonString.h
    jsonMsg.h
    logger.h
    jsonMsg.cpp
    pngs.qrc # 添加 .qrc 文件到源文件列表
)

# 设置翻译文件
set(TS_FILES gui_app_zh_CN.ts)

# 根据 Qt 版本选择合适的可执行文件创建方式
if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
    qt_add_executable(gui_app
        MANUAL_FINALIZATION
        ${PROJECT_SOURCES}
    )
    # 使用 qt_add_translation 替代 qt_create_translation
    qt_add_translation(QM_FILES ${TS_FILES})
else()
    add_executable(gui_app ${PROJECT_SOURCES})
    # 使用 qt5_add_translation 替代 qt5_create_translation
    qt5_add_translation(QM_FILES ${TS_FILES})
endif()

# 直接将 QM 文件添加到可执行文件中，而不是通过自定义目标
target_sources(gui_app PRIVATE ${QM_FILES})

# 链接 Qt 库
target_link_libraries(gui_app
    Qt${QT_VERSION_MAJOR}::Widgets
    Qt${QT_VERSION_MAJOR}::Multimedia
)

# 包含头文件目录
target_include_directories(gui_app PRIVATE ${CMAKE_CURRENT_LIST_DIR}/src)

# 设置目标属性
if(${QT_VERSION} VERSION_LESS 6.1.0)
    set(BUNDLE_ID_OPTION MACOSX_BUNDLE_GUI_IDENTIFIER com.example.gui_app)
endif()
set_target_properties(gui_app PROPERTIES
    ${BUNDLE_ID_OPTION}
    MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
    MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
    MACOSX_BUNDLE TRUE
    WIN32_EXECUTABLE TRUE
)

# 安装目标
include(GNUInstallDirs)
install(TARGETS gui_app
    BUNDLE DESTINATION .
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)

# 安装翻译文件
install(FILES ${QM_FILES} DESTINATION share/${PROJECT_NAME}/translations)

# 如果是 Qt 6，完成可执行文件的最终设置
if(QT_VERSION_MAJOR EQUAL 6)
    qt_finalize_executable(gui_app)
endif()